package com.example.course.service;

import com.example.course.bean.Student;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.course.dto.StudentDTO;
import com.example.course.dto.StudentQueryDTO;
import com.example.course.dto.StudentUpdateDTO;
import com.example.course.vo.StudentVO;
import com.example.course.dto.LoginDTO;
import com.example.course.vo.LoginVO;

/**
 * @author Jasmine-drs
 * @description 针对表【student(学生表)】的数据库操作Service
 * @createDate 2025-04-22 15:36:40
 */
public interface StudentService extends IService<Student> {

    /**
     * 获取学生列表，支持按条件查询和分页
     *
     * @param queryDTO 查询条件
     * @return 学生分页列表
     */
    Page<StudentVO> getStudentList(StudentQueryDTO queryDTO);

	/**
	 * 添加学生，包含学号重复检查
	 *
	 * @param studentDTO 学生信息
	 * @return 添加后的学生信息
	 * @throws IllegalArgumentException 当学号已存在时抛出
	 */
	StudentVO addStudent(StudentDTO studentDTO);

	/**
	 * 更新学生信息
	 *
	 * @param id               学生ID
	 * @param studentUpdateDTO 学生更新信息
	 * @return 更新后的学生信息
	 * @throws IllegalArgumentException 当学生不存在时抛出
	 */
	StudentVO updateStudent(Integer id, StudentUpdateDTO studentUpdateDTO);

	/**
	 * 删除学生（物理删除）
	 *
	 * @param id 学生ID
	 * @return 删除结果，true表示成功，false表示失败
	 * @throws IllegalArgumentException 当学生不存在时抛出
	 */
	boolean deleteStudent(Integer id);

    /**
     * 分配学生到班级
     *
     * @param id        学生ID
     * @param classesId 班级ID
     * @return 更新后的学生信息
     * @throws IllegalArgumentException 当学生或班级不存在时抛出
     */
    StudentVO assignStudentToClass(Integer id, Integer classesId);

    /**
     * 根据ID获取学生信息
     *
     * @param id 学生ID
     * @return 学生信息
     * @throws IllegalArgumentException 当学生不存在时抛出
     */
    StudentVO getStudentById(Integer id);

    /**
     * 学生登录
     *
     * @param loginDTO 登录信息
     * @return 登录成功后的学生信息
     * @throws IllegalArgumentException 当学号不存在或密码错误时抛出
     */
    LoginVO login(LoginDTO loginDTO);
}
